(set-logic AUFLIA)
(set-info :source | Burns mutual exclusion protocol. This is a benchmark of the haRVey theorem prover. It was translated to SMT-LIB by Leonardo  de Moura |)
(set-info :smt-lib-version 2.0)
(set-info :category "industrial")
(set-info :status unsat)
(set-option :boolean-functions-as-predicates true)
(declare-fun s_0 (Int) Bool)
(declare-fun s_1 (Int) Bool)
(declare-fun s_2 (Int) Bool)
(declare-fun s_3 (Int) Bool)
(declare-fun s_4 (Int) Bool)
(declare-fun s_5 (Int) Bool)
(declare-fun s (Int Int) Bool)
(declare-fun flag (Int) Bool)
(declare-fun p () Int)
(assert (not (=> (and 
(forall ((?p Int)) (=> (not (flag ?p)) (or (s_0 ?p) (s_1 ?p) (s_2 ?p)))) 
(forall ((?p Int)) 
(forall ((?q Int)) (=> (s_2 ?p) (not (s ?p ?q))))) 
(forall ((?p Int)) 
(forall ((?q Int)) (=> (and (< ?q ?p) (flag ?q) (or (s_5 ?p) (s_4 ?p) (and (s_3 ?p) (s ?p ?q)))) (and (not (s_5 ?q)) (not (and (s_4 ?q) (s ?q ?p))))))) 
(forall ((?p Int)) (=> (s_0 ?p) (not (or (s_1 ?p) (s_2 ?p) (s_3 ?p) (s_4 ?p) (s_5 ?p))))) 
(forall ((?p Int)) (=> (s_1 ?p) (not (or (s_2 ?p) (s_3 ?p) (s_4 ?p) (s_5 ?p))))) 
(forall ((?p Int)) (=> (s_2 ?p) (not (or (s_3 ?p) (s_4 ?p) (s_5 ?p))))) 
(forall ((?p Int)) (=> (s_3 ?p) (not (or (s_4 ?p) (s_5 ?p))))) 
(forall ((?p Int)) (=> (s_4 ?p) (not (s_5 ?p)))) 
(forall ((?q Int)) (let ((?v_0 (not (= ?q p)))) (=> (and ?v_0 (=> ?v_0 (s_0 ?q))) (not (or (=> ?v_0 (s_1 ?q)) (s_2 ?q) (s_3 ?q) (s_4 ?q) (s_5 ?q)))))) 
(forall ((?q Int)) (=> (=> (not (= ?q p)) (s_1 ?q)) (not (or (s_2 ?q) (s_3 ?q) (s_4 ?q) (s_5 ?q))))) 
(forall ((?q Int)) (=> (s_2 ?q) (not (or (s_3 ?q) (s_4 ?q) (s_5 ?q))))) 
(forall ((?q Int)) (=> (s_3 ?q) (not (or (s_4 ?q) (s_5 ?q))))) 
(forall ((?q Int)) (=> (s_4 ?q) (not (s_5 ?q)))) (s_0 p)) (and 
(forall ((?r Int)) (let ((?v_1 (not (= ?r p)))) (=> (not (and ?v_1 (=> ?v_1 (flag ?r)))) (or (and ?v_1 (=> ?v_1 (s_0 ?r))) (=> ?v_1 (s_1 ?r)) (s_2 ?r))))) 
(forall ((?r Int)) 
(forall ((?q Int)) (=> (s_2 ?r) (not (s ?r ?q))))) 
(forall ((?r Int)) 
(forall ((?q Int)) (let ((?v_2 (not (= ?q p)))) (=> (and (< ?q ?r) ?v_2 (=> ?v_2 (flag ?q)) (or (s_5 ?r) (s_4 ?r) (and (s_3 ?r) (s ?r ?q)))) (and (not (s_5 ?q)) (not (and (s_4 ?q) (s ?q ?r))))))))))))
(check-sat)
(exit)
